﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Smart.Processing
{
	public class ProcessingEventArgs<TResult>
	{
		public bool Processed { get; set; }
		public bool StopProcessing { get; set; }
		public TResult Result { get; set; }

		public ProcessingEventArgs(TResult defaultResult)
		{
			Result = defaultResult;
		}
	}

	public class ProcessingEventArgs<TEventArg, TResult> : ProcessingEventArgs<TResult>
	{
		public TEventArg Arg { get; set; }

		public ProcessingEventArgs(TEventArg arg, TResult defaultResult)
			:base(defaultResult)
		{
			Arg = arg;
		}
	}

	public class ProcessingEventArgs<TEventArg, TEventArg2, TResult> : ProcessingEventArgs<TEventArg, TResult>
	{
		public TEventArg2 Arg2 { get; set; }

		public ProcessingEventArgs(TEventArg arg, TEventArg2 arg2, TResult defaultResult)
			: base(arg, defaultResult)
		{
			Arg2 = arg2;
		}
	}

	public class ProcessingEventArgs<TEventArg, TEventArg2, TEventArg3, TResult> : ProcessingEventArgs<TEventArg, TEventArg2, TResult>
	{
		public TEventArg3 Arg3 { get; set; }

		public ProcessingEventArgs(TEventArg arg, TEventArg2 arg2, TEventArg3 arg3, TResult defaultResult)
			: base(arg, arg2, defaultResult)
		{
			Arg3 = arg3;
		}
	}

	public class ProcessingEventArgs<TEventArg, TEventArg2, TEventArg3, TEventArg4, TResult> : ProcessingEventArgs<TEventArg, TEventArg2, TEventArg3, TResult>
	{
		public TEventArg4 Arg4 { get; set; }

		public ProcessingEventArgs(TEventArg arg, TEventArg2 arg2, TEventArg3 arg3, TEventArg4 arg4, TResult defaultResult)
			: base(arg, arg2, arg3, defaultResult)
		{
			Arg4 = arg4;
		}
	}
}
